home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1999 #2 / Amiga Plus CD - 1999 - No. 2.iso / System-Boost / Workbench / ToolManager / Source / Converter / dock.c < prev    next >
C/C++ Source or Header  |  1998-06-17  |  6KB  |  162 lines

  1. /*
  2.  * dock.c  V3.1
  3.  *
  4.  * ToolManager old preferences converter for Dock Objects
  5.  *
  6.  * Copyright (C) 1990-98 Stefan Becker
  7.  *
  8.  * This source code is for educational purposes only. You may study it
  9.  * and copy ideas or algorithms from it for your own projects. It is
  10.  * not allowed to use any of the source codes (in full or in parts)
  11.  * in other programs. Especially it is not allowed to create variants
  12.  * of ToolManager or ToolManager-like programs from this source code.
  13.  *
  14.  */
  15.  
  16. #include "converter.h"
  17.  
  18. /* Local data */
  19. static struct DockDATAChunk ddc;
  20.  
  21. /* Old Prefs stuff */
  22. struct DockPrefsObject {
  23.                         ULONG           dpo_StringBits;
  24.                         ULONG           dpo_Flags;
  25.                         LONG            dpo_XPos;
  26.                         LONG            dpo_YPos;
  27.                         ULONG           dpo_Columns;
  28.                         struct TextAttr dpo_Font;
  29.                        };
  30. #define DOPO_NAME     (1L << 0)
  31. #define DOPO_HOTKEY   (1L << 1)
  32. #define DOPO_PSCREEN  (1L << 2)
  33. #define DOPO_TITLE    (1L << 3)
  34. #define DOPO_FONTNAME (1L << 4)
  35. #define DOPOF_ACTIVATED (1L << 0)
  36. #define DOPOF_CENTERED  (1L << 1)
  37. #define DOPOF_FRONTMOST (1L << 2)
  38. #define DOPOF_MENU      (1L << 3)
  39. #define DOPOF_PATTERN   (1L << 4)
  40. #define DOPOF_POPUP     (1L << 5)
  41. #define DOPOF_TEXT      (1L << 6)
  42. #define DOPOF_VERTICAL  (1L << 7)
  43. #define DOPOF_BACKDROP  (1L << 8)
  44. #define DOPOF_STICKY    (1L << 9)
  45. #define DOPOT_EXEC     (1L << 0)
  46. #define DOPOT_IMAGE    (1L << 1)
  47. #define DOPOT_SOUND    (1L << 2)
  48. #define DOPOT_CONTINUE (1L << 7)
  49.  
  50. /* Conversion routine */
  51. #define DEBUGFUNCTION ConvertDockConfig
  52. BOOL ConvertDockConfig(void *chunk, struct IFFHandle *iffh, ULONG id)
  53. {
  54.  struct DockPrefsObject *dpo = chunk;
  55.  char                   *s   = (char *) (dpo + 1);
  56.  BOOL                    rc  = FALSE;
  57.  
  58.  DOCK_LOG(LOG3(Entry, "Chunk 0x%08lx IFF Handle 0x%08lx ID 0x%08lx",
  59.                chunk, iffh, id))
  60.  
  61.  /* Get name to create ID list entry */
  62.  if (dpo->dpo_StringBits & DOPO_NAME) {
  63.   char *name = s;
  64.  
  65.   /* Copy fixed data */
  66.   ddc.ddc_Standard.sdc_ID    = id;
  67.   ddc.ddc_Standard.sdc_Flags = 0;
  68.   ddc.ddc_LeftEdge           = dpo->dpo_XPos;
  69.   ddc.ddc_TopEdge            = dpo->dpo_YPos;
  70.   ddc.ddc_Columns            = dpo->dpo_Columns;
  71.   ddc.ddc_FontYSize          = dpo->dpo_Font.ta_YSize;
  72.   ddc.ddc_FontStyle          = dpo->dpo_Font.ta_Style;
  73.   ddc.ddc_FontFlags          = dpo->dpo_Font.ta_Flags;
  74.  
  75.   /* Copy flags */
  76.   if (dpo->dpo_Flags & DOPOF_ACTIVATED) ddc.ddc_Standard.sdc_Flags
  77.                                           = DATA_DOCKF_ACTIVATED;
  78.   if (dpo->dpo_Flags & DOPOF_MENU)      ddc.ddc_Standard.sdc_Flags
  79.                                          |= DATA_DOCKF_MENU;
  80.   if (dpo->dpo_Flags & DOPOF_TEXT)      ddc.ddc_Standard.sdc_Flags
  81.                                          |= DATA_DOCKF_TEXT;
  82.   else
  83.                                         ddc.ddc_Standard.sdc_Flags
  84.                                          |= DATA_DOCKF_IMAGES;
  85.   if (dpo->dpo_Flags & DOPOF_CENTERED)  ddc.ddc_Standard.sdc_Flags
  86.                                          |= DATA_DOCKF_CENTERED;
  87.   if (dpo->dpo_Flags & DOPOF_STICKY)    ddc.ddc_Standard.sdc_Flags
  88.                                          |= DATA_DOCKF_STICKY;
  89.   if (dpo->dpo_Flags & DOPOF_BACKDROP)  ddc.ddc_Standard.sdc_Flags
  90.                                          |= DATA_DOCKF_BACKDROP;
  91.   if (dpo->dpo_Flags & DOPOF_FRONTMOST) ddc.ddc_Standard.sdc_Flags
  92.                                          |= DATA_DOCKF_FRONTMOST;
  93.   if (dpo->dpo_Flags & DOPOF_POPUP)     ddc.ddc_Standard.sdc_Flags
  94.                                          |= DATA_DOCKF_POPUP;
  95.  
  96.   /* Window title set? Yes, set border flag */
  97.   if (dpo->dpo_StringBits & DOPO_TITLE) ddc.ddc_Standard.sdc_Flags
  98.                                          |= DATA_DOCKF_BORDER;
  99.  
  100.   /* Create new config entry */
  101.   rc = (PushChunk(iffh, ID_TMDO, ID_FORM, IFFSIZE_UNKNOWN) == 0) &&
  102.        (PushChunk(iffh, 0,       ID_DATA, IFFSIZE_UNKNOWN) == 0) &&
  103.        (WriteChunkBytes(iffh, &ddc, sizeof(struct DockDATAChunk))
  104.          == sizeof(struct DockDATAChunk)) &&
  105.        (PopChunk(iffh) == 0) &&
  106.        (((dpo->dpo_StringBits & DOPO_NAME)     == 0) ||
  107.         (s = ConvertConfigString(s, iffh, ID_NAME))) &&
  108.        (((dpo->dpo_StringBits & DOPO_HOTKEY)   == 0) ||
  109.         (s = ConvertConfigString(s, iffh, ID_HKEY))) &&
  110.        (((dpo->dpo_StringBits & DOPO_PSCREEN)  == 0) ||
  111.         (s = ConvertConfigString(s, iffh, ID_PSCR))) &&
  112.        (((dpo->dpo_StringBits & DOPO_TITLE)    == 0) ||
  113.         (s += strlen(s) + 1))                        && /* Ignore title */
  114.        (((dpo->dpo_StringBits & DOPO_FONTNAME) == 0) ||
  115.         (s = ConvertConfigString(s, iffh, ID_FONT)));
  116.  
  117.   /* All OK? */
  118.   if (rc) {
  119.    struct DockEntryChunk dec;
  120.    UBYTE                 flags;
  121.  
  122.    /* Yes, convert dock entries. Get next tool entry */
  123.    while (rc && ((flags = *s++) & DOPOT_CONTINUE)) {
  124.  
  125.     /* Convert Exec object */
  126.     if (flags & DOPOT_EXEC) {
  127.      dec.dec_ExecObject = FindExecID(s);
  128.      s += strlen(s) + 1;
  129.     } else
  130.      dec.dec_ExecObject = 0;
  131.  
  132.     /* Convert Image object */
  133.     if (flags & DOPOT_IMAGE) {
  134.      dec.dec_ImageObject = FindImageID(s);
  135.      s += strlen(s) + 1;
  136.     } else
  137.      dec.dec_ImageObject = 0;
  138.  
  139.     /* Convert Sound object */
  140.     if (flags & DOPOT_SOUND) {
  141.      dec.dec_SoundObject = FindSoundID(s);
  142.      s += strlen(s) + 1;
  143.     } else
  144.      dec.dec_SoundObject = 0;
  145.  
  146.     /* Create dock entry chunk */
  147.     rc = (PushChunk(iffh, 0, ID_ENTR, IFFSIZE_UNKNOWN) == 0) &&
  148.          (WriteChunkBytes(iffh, &dec, sizeof(struct DockEntryChunk))
  149.           == sizeof(struct DockEntryChunk)) &&
  150.          (PopChunk(iffh) == 0);
  151.    }
  152.  
  153.    /* All OK? Yes, pop config entry */
  154.    if (rc) rc = (PopChunk(iffh) == 0);
  155.   }
  156.  }
  157.  
  158.  DOCK_LOG(LOG1(Result, "%ld", rc))
  159.  
  160.  return(rc);
  161. }
  162.